self.addEventListener('message', function (e) {
	// console.log('Received message ' + JSON.stringify(e.data));
	if (e.data.cmd === 'start') {
		doKeep(e.data.params);
	} else if (e.data.cmd === 'doPull') {
		doPull(e.data.params);
	}
}, false);

self.addEventListener('error', function (e) {
	// console.log('Received error ' + e);
}, false);

function doKeep(params) {
	if (typeof params.data === 'object') {
        const datas = Object.keys(params.data).map((key) => {
            return encodeURIComponent(key) + '=' + encodeURIComponent(params.data[key]);
        }).join('&');
        params.data = datas;
    }
	
	fetch(params.url, {
		method: 'POST',
        headers: {
        	'Content-Type' : 'application/x-www-form-urlencoded'
        },
        body: params.data,
        credentials: 'include'
	}).then(resp => {
		setTimeout(() => {
			doKeep(params);
		}, 10000);
	});
}

var pullTimer;
function doPull(params) {
	if (pullTimer) {
		clearTimeout(pullTimer);
	}
	pullTimer = setTimeout(() => {
		self.postMessage({
			action: 'pull'
		})
	}, params.timeout);
}